package com.ygqh.baby.service.task;

import java.util.Date;
import java.util.List;
import java.util.Map;

import com.ygqh.baby.ao.Message;
import com.ygqh.baby.ao.WdtTradeStatus;
import com.ygqh.baby.model.wdt.WdtInStockOrder;
import com.ygqh.baby.model.wdt.WdtOrderDetialResData;
import com.ygqh.baby.model.wdt.WdtOrderResData;
import com.ygqh.baby.model.wdt.WdtOutStockOrder;
import com.ygqh.baby.model.wdt.WdtResult;
import com.ygqh.baby.po.AdminPurchase;
import com.ygqh.baby.po.YgOrder;
import com.ygqh.baby.po.YgReturnOrder;

public interface WdtService {

	/**
	 * 同步订单到旺店通
	 * 
	 * @return
	 */
	public WdtResult createOrder(YgOrder ygOrder);

	public Message createOrderByOrderIds(List<Long> orderIds);

	/**
	 * 同步入库单到旺店通
	 * 
	 * @param ygOrder
	 * @return
	 */
	public WdtResult createStockInOrder(AdminPurchase purchaseOrder);
	
	/**
	 * 同步换货出库单到旺店通
	 * 
	 * @param ygOrder
	 * @return
	 */
	public WdtResult createChangeOrder(YgReturnOrder returnOrder);

	/**
	 * 取消单据接口 ,处理请求时会判断单据是否是可取消则状态，如果是不可取消则失败
	 * 
	 * @param OrderCode
	 *            ERP内单据编号
	 * @param OrderType
	 *            单据类型(1是订单,2采购单)
	 * @param Reason
	 * @param log
	 *            签出后是否拦截 0 不拦截(默认) 1 拦截 如果签出则无法取消
	 * 
	 * @return
	 */
	public WdtResult CancelOrder(String OrderCode, int OrderType, String Reason, int log);

	/**
	 * 
	 * @param orderCode
	 *            这里是旺店通订单号
	 * @return
	 */
	public WdtResult QueryTradeByNO(String orderCode);

	/**
	 * .查询ERP采购单信息
	 * 
	 * @param purchaseNO
	 *            ERP内采购单编号
	 * @param startTime
	 *            开始时间
	 * @param endTime
	 *            结束时间
	 * @param CurStatus
	 *            采购单状态
	 * @param pageNO
	 *            指定页码，取值为大于1的整数
	 * @param pageSize
	 *            指定每页大小,最大值为50
	 * @return
	 */
	public WdtResult queryPurchaseOrder(String purchaseNO, Date startTime, Date endTime, int CurStatus, Integer pageNO, Integer pageSize);

	/**
	 * 查询订单接口（根据订单修改时间）
	 * 
	 * @param startTime
	 *            起止时间跨度不能超过1小时
	 * @param endTime
	 *            结束时间不能大于当前时间
	 * @param tradeStatus
	 *            订单状态
	 * @param pageNO
	 *            页码
	 * @param pageSize
	 *            每页的条数最大为40，超出40系统会默认为40进行处理，可以根据返回的TotalCount来计算下次请求要设置的页码。
	 * @return
	 */
	public WdtResult QueryTradeByMTime(Date startTime, Date endTime, WdtTradeStatus tradeStatus, Integer pageNO, Integer pageSize);

	/**
	 * 查询货品库存信息
	 * 
	 * @param skuCode
	 *            如果不指定Sku_Code则是查询整个仓库的所有货品库存,每页大小为固定值50
	 * @param pageNO
	 * @param startTime
	 *            起止时间跨度不能超过1小时
	 * @param endTime
	 *            结束时间不能大于当前时间
	 * @return
	 */
	public WdtResult QueryStorage(String skuCode, Integer pageNO, Date startTime, Date endTime);

	/**
	 * 查询出库单数据
	 * 
	 * @param Type
	 *            可不填,不填则是查询所有类型的出库单. 为1是查询销售出库单
	 * @param pageNO
	 *            页码，取值范围：大于0的整数
	 * @param pageSize
	 *            每页条数，取值范围1~30
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	public WdtResult QueryStockoutOrder(Integer Type, Integer pageNO, Integer pageSize, Date startTime, Date endTime);

	/**
	 * 查询入库单数据
	 * 
	 * @param Type
	 *            可不填,不填则是查询所有类型的入库单. 为101是查询采购入库单 为103是查询退货入库单
	 * 
	 * @param pageNO
	 *            页码，取值范围：大于0的整数
	 * @param pageSize
	 *            每页条数，取值范围1~30
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	public WdtResult QueryStockinOrder(Integer Type, Integer pageNO, Integer pageSize, Date startTime, Date endTime);

	// ===========================================
	// 我是分割线====================================================================
	// ===========================================
	// 我是分割线====================================================================
	// ===========================================
	// 我是分割线====================================================================

	public int saveWdtOrder(WdtOrderResData wdtOrder);

	public int saveWdtOrderBatch(List<WdtOrderResData> wdtOrderList);

	/**
	 * 获取旺店通订单列表
	 * 
	 * @return
	 */
	public List<WdtOrderResData> findWdtOrderList();

	/**
	 * 旺店通订单编号集合
	 * 
	 * @return
	 */
	public List<String> findWdtOrderNoList();

	public int saveWdtOrderDetail(WdtOrderDetialResData detail);

	public int saveWdtOrderDetailBatch(List<WdtOrderDetialResData> detailList);

	/**
	 * 获取订单详细
	 * 
	 * @param tradeNo
	 * @return
	 */
	public List<WdtOrderDetialResData> findWdtOrderDetail(String tradeNo);

	public int saveStockOutOrder(WdtOutStockOrder outStock);

	public int saveStockOutOrderBatch(List<WdtOutStockOrder> outStockList);

	public int saveStockInOrder(WdtInStockOrder inStock);

	public int saveStockInOrderBatch(List<WdtInStockOrder> inStockList);

	public List<String> findStockOutOrderNOList();

	public List<String> findStockInOrderNOList();

	public int updateWdtOrderBatch(List<WdtOrderResData> orderList);

	public WdtOrderResData findWdtOrderByTradeNo(String tradeNo);

	public WdtInStockOrder findStockInByPurchaseNo(String purchaseNo);
	/**
	 * 查询wdt_out_stock 与yg_order 发货状态不同的数据
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public List<Map<String,Object>> selectNoSendOrder(Date startDate,Date endDate);
	/**
	 * 查询wdt_in_stock 与admin_purchase 不同的数据
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public List<Map<String,Object>> selectPurchaseNoInstock(Date startDate,Date endDate);
}
